home *** CD-ROM | disk | FTP | other *** search
/ Ubisoft - ECTS 99 (UK) (Disc 2) (Press Kit) / Ubisoft - ECTS 99 (UK) (Disc 2) (Press Kit).bin / Ubi_soft.exe / Intro2.dxr / Internal_17_Push Button.ls < prev    next >
Encoding:
Text File  |  1999-08-18  |  11.0 KB  |  262 lines

  1. property spriteNum, mySprite, myMember, getPDLError, myStandardMember, myRolloverMember, myMouseDownMember, myDisabledMember, myMouseDownSound, myMouseUpSound, myActiveFlag, myXRayFlag, myMessage, theMouseWasUp, myMouseDown, myRollover, mySubscribersList
  2.  
  3. on getBehaviorDescription me
  4.   return "PUSH BUTTON" & RETURN & RETURN & "This behavior sets the member of a sprite depending on the state of the mouse (elsewhere, rollover, mouseDown, mouseUp)." & RETURN & RETURN & "This creates a button which can either initiate actions in other sprites, or provide visual feedback for other behaviors attached to the same sprite." & RETURN & RETURN & "The behavior can be enabled or disabled, using a #PushButton_ToggleActive call to the behavior or the sprite." & RETURN & RETURN & "Two messaging systems are provided:" & RETURN & "1) A custom message is sent to all sprites whenever the Push Button behavior is activated." & RETURN & RETURN & "2) Objects can 'subscribe' to the behavior in order to receive PushButton_Activated, _Enabled and _Disabled messages.  A two-way messaging system allows for cleaning up object references before an object is destroyed." & RETURN & RETURN & "The behavior can be set to consider that all sprites in higher channels either block or let through all mouse events.  If mouse events are allowed to pass, you can place blended sprites above the button to change its color.  If mouse events are blocked, such translucent sprites provide an alternative method for disabling the button." & RETURN & RETURN & "PERMITTED MEMBER TYPES" & RETURN & PermittedMemberTypes(me) & RETURN & RETURN & "PARAMETERS:" & RETURN & "* Standard member (when mouse is elsewhere)" & RETURN & "* Rollover member" & RETURN & "* MouseDown member" & RETURN & "* Disabled member" & RETURN & "Optional parameters:" & RETURN & "* MouseDown sound" & RETURN & "* MouseUp sound" & RETURN & "If members are placed consecutively in the cast in this order then default values can be used to create the button." & RETURN & RETURN & "* Do sprites above the button allow mouse events through?" & RETURN & "* Custom Message sent to other sprites on mouseUp"
  5. end
  6.  
  7. on getBehaviorTooltip me
  8.   return "Use with graphic members." & RETURN & RETURN & "+ Swaps the member of the sprite according to the state of the mouse" & RETURN & "+ Can play a brief sound on mouseDown and/or mouseUp" & RETURN & "+ Sends a custom message of your choice to all other sprites." & RETURN & RETURN & "Trigger actions of other sprites with this dynamic button behavior" & RETURN & "or use it to provide visual feedback for other behaviors on the same" & RETURN & "sprite (for example: 'Jump to Marker Button')." & RETURN & "This behavior can also interact with custom objects."
  9. end
  10.  
  11. on beginSprite me
  12.   Initialize(me)
  13. end
  14.  
  15. on prepareFrame me
  16.   if myActiveFlag then
  17.     CheckForRollover(me)
  18.   end if
  19. end
  20.  
  21. on endSprite me
  22.   call(#PushButton_ClosingDown, mySubscribersList, me, spriteNum, myMessage)
  23. end
  24.  
  25. on Initialize me
  26.   mySprite = sprite(me.spriteNum)
  27.   myMember = mySprite.member
  28.   if not voidp(getPDLError) then
  29.     ErrorAlert(me, #getPDL_Invalid, myMember.type)
  30.   end if
  31.   repeat while the last char in myMessage = SPACE
  32.     delete char -30000 of myMessage
  33.   end repeat
  34.   if myMessage contains SPACE then
  35.     ErrorAlert(me, #spaceInMessage, myMessage)
  36.   end if
  37.   myMessage = symbol(myMessage)
  38.   myActiveFlag = myActiveFlag = #Active
  39.   myXRayFlag = myXRayFlag = "let all mouse events through"
  40.   myStandardMember = value(myStandardMember)
  41.   myRolloverMember = value(myRolloverMember)
  42.   myMouseDownMember = value(myMouseDownMember)
  43.   myDisabledMember = value(myDisabledMember)
  44.   myMouseDownSound = value(myMouseDownSound)
  45.   myMouseUpSound = value(myMouseUpSound)
  46.   if myActiveFlag then
  47.     myMember = myStandardMember
  48.     mySprite.member = myMember
  49.   else
  50.     myMember = myDisabledMember
  51.     mySprite.member = myMember
  52.   end if
  53.   mySubscribersList = []
  54.   sendAllSprites(#PushButton_OpenForBusiness, mySubscribersList, me, spriteNum, myMessage)
  55. end
  56.  
  57. on CheckForRollover me
  58.   mouseOverMe = rollOver(spriteNum)
  59.   if mouseOverMe then
  60.     if not myXRayFlag then
  61.       mouseOverMe = the mouseMember = myMember
  62.     end if
  63.   end if
  64.   if myRollover = mouseOverMe then
  65.     if theMouseWasUp = the mouseUp then
  66.       exit
  67.     else
  68.       theMouseWasUp = the mouseUp
  69.       if mouseOverMe then
  70.         if the mouseUp then
  71.           if myMouseDown then
  72.             Activate(me)
  73.           else
  74.             myMember = myRolloverMember
  75.             mySprite.member = myMember
  76.           end if
  77.         else
  78.           clickOn(me)
  79.         end if
  80.       else
  81.         if the mouseUp then
  82.           if myMouseDown then
  83.             Disactivate(me)
  84.           end if
  85.         end if
  86.       end if
  87.     end if
  88.   else
  89.     myRollover = mouseOverMe
  90.     if myMouseDown then
  91.       if myRollover then
  92.         myMember = myMouseDownMember
  93.         mySprite.member = myMember
  94.       else
  95.         myMember = myStandardMember
  96.         mySprite.member = myMember
  97.       end if
  98.     else
  99.       if not (the mouseDown) and myRollover then
  100.         myMember = myRolloverMember
  101.         mySprite.member = myMember
  102.       else
  103.         myMember = myStandardMember
  104.         mySprite.member = myMember
  105.       end if
  106.     end if
  107.   end if
  108. end
  109.  
  110. on clickOn me
  111.   myMouseDown = 1
  112.   myMember = myMouseDownMember
  113.   mySprite.member = myMember
  114.   updateStage()
  115. end
  116.  
  117. on Activate me
  118.   myMouseDown = 0
  119.   theMouseWasUp = 0
  120.   myMember = myStandardMember
  121.   mySprite.member = myMember
  122.   updateStage()
  123.   sendAllSprites(myMessage, me, spriteNum)
  124.   call(#PushButton_Activated, mySubscribersList, me, spriteNum, myMessage)
  125. end
  126.  
  127. on Disactivate me
  128.   myMouseDown = 0
  129.   myMember = myStandardMember
  130.   mySprite.member = myMember
  131. end
  132.  
  133. on PushButton_ToggleActive me, trueOrFalse
  134.   if voidp(trueOrFalse) then
  135.     myActiveFlag = not myActiveFlag
  136.   else
  137.     case ilk(trueOrFalse) of
  138.       #integer:
  139.         myActiveFlag = trueOrFalse <> 0
  140.       otherwise:
  141.         return #invalidTypeError
  142.     end case
  143.   end if
  144.   if myActiveFlag then
  145.     myMember = myStandardMember
  146.     mySprite.member = myMember
  147.     call(#PushButton_Enabled, mySubscribersList, me, spriteNum, myMessage)
  148.   else
  149.     myMember = myDisabledMember
  150.     mySprite.member = myMember
  151.     call(#PushButton_Disabled, mySubscribersList, me, spriteNum, myMessage)
  152.   end if
  153. end
  154.  
  155. on PushButton_GetReference me, theList
  156.   case ilk(theList) of
  157.     #list:
  158.       theList.append(me)
  159.     #propList:
  160.       theList.addProp(me.spriteNum, me)
  161.     otherwise:
  162.       return me
  163.   end case
  164.   return theList
  165. end
  166.  
  167. on PushButton_Subscribe me, callingBehavior, theMessage
  168.   if not voidp(theMessage) then
  169.     if theMessage <> myMessage then
  170.       exit
  171.     end if
  172.   end if
  173.   if mySubscribersList.getPos(callingBehavior) then
  174.     exit
  175.   else
  176.     if objectp(callingBehavior) then
  177.       mySubscribersList.append(callingBehavior)
  178.       return me
  179.     end if
  180.   end if
  181. end
  182.  
  183. on PushButton_Unsubscribe me, callingBehavior
  184.   mySubscribersList.deleteOne(callingBehavior)
  185. end
  186.  
  187. on ErrorAlert me, theError, data
  188.   case theError of
  189.     #getPDLError:
  190.       alert("Error: This behavior works only with the following members types:  " & PermittedMemberTypes(me) & RETURN & RETURN & "Hit OK and then delete this behavior from the sprite.  See the Help system for details on deleting behaviors.")
  191.       if the optionDown then
  192.         return [#getPDLError: [#comment: "ERROR:   Wrong member type.   Click 'Cancel'.", #format: #string, #range: [EMPTY], #default: EMPTY]]
  193.       end if
  194.     otherwise:
  195.       case theError of
  196.         #invalidMemberType:
  197.           if the runMode = "Author" then
  198.             behaviorName = string(me)
  199.             delete word 1 of behaviorName
  200.             delete char -30001 of behaviorName
  201.             delete char -30001 of behaviorName
  202.             alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & RETURN & "Behavior " & behaviorName & " only works with Field and Text members." & RETURN & RETURN & "Current member type = #" & data)
  203.           end if
  204.           abort()
  205.         #spaceInMessage:
  206.           if the runMode = "Author" then
  207.             alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & "Behavior " & behaviorName & RETURN & RETURN & "Message includes spaces: " & QUOTE & data & QUOTE & RETURN & "Only the first word will be used in sendAllSprite calls:" & RETURN & RETURN & "sendAllSprites (#" & data.word[1] & ", <me>, " & spriteNum & ")")
  208.           end if
  209.       end case
  210.   end case
  211. end
  212.  
  213. on getPropertyDescriptionList me
  214.   if not (the currentSpriteNum) then
  215.     exit
  216.   end if
  217.   theMember = sprite(the currentSpriteNum).member
  218.   memberType = theMember.type
  219.   permittedTypes = PermittedMemberTypes(me)
  220.   if not permittedTypes.getPos(memberType) then
  221.     return ErrorAlert(me, #getPDLError, permittedTypes)
  222.   end if
  223.   theMemberNum = theMember.number
  224.   suitableMembersList = GetSuitableMembers(me, permittedTypes)
  225.   descriptionList = [#myStandardMember: [#comment: "- GRAPHICS - Standard member for sprite:", #format: #member, #range: suitableMembersList, #default: theMember], #myRolloverMember: [#comment: "Rollover member:", #format: #member, #range: suitableMembersList, #default: member(theMemberNum + 1)], #myMouseDownMember: [#comment: "MouseDown member:", #format: #member, #range: suitableMembersList, #default: member(theMemberNum + 2)], #myDisabledMember: [#comment: "Disabled member:", #format: #member, #range: suitableMembersList, #default: member(theMemberNum + 3)]]
  226.   soundsAvailable = GetSuitableMembers(me, [#sound])
  227.   if soundsAvailable.count() then
  228.     soundsAvailable.addAt(1, #none)
  229.     descriptionList.addProp(#myMouseDownSound, [#comment: "- SOUNDS - Sound to play on mouseDown:", #format: #sound, #range: soundsAvailable, #default: member(theMemberNum + 4)])
  230.     descriptionList.addProp(#myMouseUpSound, [#comment: "Sound to play on mouseUp:", #format: #sound, #range: soundsAvailable, #default: member(theMemberNum + 5)])
  231.   end if
  232.   descriptionList.addProp(#myActiveFlag, [#comment: "- INTERACTION - Button is initially", #format: #symbol, #range: [#Active, #inactive], #default: #Active])
  233.   descriptionList.addProp(#myXRayFlag, [#comment: "Sprites which cover the button", #format: #string, #range: ["block all mouse events", "let all mouse events through"], #default: 0])
  234.   descriptionList.addProp(#myMessage, [#comment: "One-word message on mouseUp:", #format: #string, #default: "Sprite_" & the currentSpriteNum & "_Clicked"])
  235.   return descriptionList
  236. end
  237.  
  238. on GetSuitableMembers me, permittedTypes
  239.   cursor(4)
  240.   suitableMembersList = []
  241.   maxCastLib = the number of castLibs
  242.   repeat with theCastLib = 1 to maxCastLib
  243.     maxMember = the number of castMembers of castLib theCastLib
  244.     repeat with memberNumber = 1 to maxMember
  245.       theMember = member(memberNumber, theCastLib)
  246.       if permittedTypes.getPos(theMember.type) then
  247.         if theMember.name = EMPTY then
  248.           suitableMembersList.append(theMember)
  249.           next repeat
  250.         end if
  251.         suitableMembersList.append(theMember.name)
  252.       end if
  253.     end repeat
  254.   end repeat
  255.   cursor(-1)
  256.   return suitableMembersList
  257. end
  258.  
  259. on PermittedMemberTypes me
  260.   return [#bitmap, #filmLoop, #flash, #movie, #picture, #quickTimeMedia, #shape, #vectorShape]
  261. end
  262.